import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // Android系统中某些手机最近任务使用，iOS无效
      title: '主题配置',
      theme: ThemeData(
        // 亮度:暗黑等，默认light,一般跟随系统适配
        brightness: Brightness.light,
        // 参数值不是Color，而是MaterialColor(包含了primaryColor和accentColor)，不能使用Color(0xff000000)
        // MaterialColor可以将该颜色划分为不同等级
        // 各种组件 导航 等颜色，相当于primaryColor、accentColor集合
        primarySwatch: Colors.purple,
        // 主色：主要决定导航、TabBar颜色，覆盖primarySwatch
        //primaryColor: Colors.yellow,
        // 次主色：很多组件背景色，如进度条、按钮等
        //accentColor: Colors.green,
        fontFamily: "Skia",
        // 指定使用的字体
        // 单独设置button主题,修改按钮默认的大小等，统一风格
        buttonTheme: ButtonThemeData(
          height: 35,
          minWidth: 10,
        ),
        // Card主题,统一样式
        cardTheme: CardTheme(color: Colors.red, elevation: 10),
        // 文字主题 修改文本默认大小等
        textTheme: TextTheme(
          // 默认文本，如Text组件
          bodyText1: TextStyle(),
        ),
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('主题'),
        ),
        // 如果不想让某个组件，跟随全局组件可以使用Theme组件将其包裹然后自定义
        floatingActionButton: Theme(
          data: ThemeData(accentColor: Colors.yellowAccent),
          child: FloatingActionButton(
            onPressed: null,
            child: Icon(Icons.arrow_forward),
          ),
        ),
        body: Column(
          children: [
            Text(
              '测试',
              // 直接使用系统theme
              style: Theme.of(context).textTheme.bodyText2,
            ),
            // 使用字体
            Text(
              'hello',
              style: TextStyle(fontFamily: 'Skia'),
            ),
            Text('hello'),
            Text('你好'),
            Switch(value: true, onChanged: (value) {}),
            // iOS风格开关
            CupertinoSwitch(
              value: true,
              onChanged: (value) {},
              activeColor: Colors.blue,
            ),
            // 使用Theme类获取定义好的主题
            Container(
              width: 40.0,
              height: 40.0,
              color: Theme.of(context).primaryColor,
            ),
            // 局部主题，该theme后所有的子控件继承该主题
            Theme(
                data: ThemeData(primarySwatch: Colors.purple),
                child: Text('局部主题')),
            // 以上直接创建ThemeData覆盖全局不好，使用copyWith改变某些注解比较实用
            Theme(
              // 除了改变颜色，其他遵循全局主题
              data: Theme.of(context).copyWith(accentColor: Colors.deepPurple),
              child: Checkbox(value: true, onChanged: null),
            )
          ],
        ),
      ),
    );
  }
}
